<?php

//On fait expirer les token à 5 minutes
define("TOKEN_EXPIRATION", 300);

//Génère un token aléatoire, l'enregistre dans la session sous le nom $nomformulaire et retourne le token
function genererToken($nomformulaire, $nbtours) {
	
	$token = "";
	
	//Si la session est démarrée
	if(isset($_SESSION)) {
	
		//Fabriquer le token
		$token = hash("sha512", mt_rand(0, mt_getrandmax()));
		
		//Stocker le token dans la session et son timestamp de création
		$_SESSION[$nomformulaire]["token"] = $token;
		$_SESSION[$nomformulaire]["temps"] = time()*$nbtours;
		$_SESSION[$nomformulaire]["nbtours"] = $nbtours;
		
	}
	
	//Retourner le token
	return $token;
	
}

//Valide le token $token pour le formulaire $nomformulaire
function validerToken($nomformulaire, $token) {
	
	$resultat = false;
	
	//Si pas de session, pas de risque de XSRF
	if(!isset($_SESSION))
		return true;
	
	if(!isset($_SESSION[$nomformulaire]))
		return false;
	
	//Sinon on teste le token
	else {
		if(isset($_SESSION[$nomformulaire]))
			$resultat = ($_SESSION[$nomformulaire]["token"] == $token && time() - $_SESSION[$nomformulaire]["temps"] < TOKEN_EXPIRATION && $_SESSION[$nomformulaire]["nbtours"] > 0);
		else
			$resultat = false;
	}
	
	if($_SESSION[$nomformulaire]["nbtours"] > 0)
		$_SESSION[$nomformulaire]["nbtours"]--;
	
	if(time() - $_SESSION[$nomformulaire]["temps"] > TOKEN_EXPIRATION || $_SESSION[$nomformulaire]["nbtours"] <= 0) {
	
		//On détruit le token de la session
		unset($_SESSION[$nomformulaire]["token"]);
		unset($_SESSION[$nomformulaire]["temps"]);
		unset($_SESSION[$nomformulaire]["nbtours"]);
		unset($_SESSION[$nomformulaire]);
		
		//On détruit le cookie
		setcookie($nomformulaire, "", time() - 3600);
		unset($_COOKIE[$nomformulaire]);
	
	}
	
	//On retourne le résultat
	return $resultat;
	
}

?>